
CC=gcc
CFLAGS=-g -Wall -Wextra -Og -std=gnu11 -I$(LIB_DIR)

LIB_DIR=./lib
#WIN_LIB=-lws2_32

TEST_LIB_DIR=./test-lib
IO_DIR=./io
NETP_DIR=./netp

all: $(TEST_LIB_DIR)/test_rio $(TEST_LIB_DIR)/test_dup2 \
     $(IO_DIR)/cpfile $(IO_DIR)/readdir \
     $(NETP_DIR)/hostinfo $(NETP_DIR)/echoclient $(NETP_DIR)/echoserver $(NETP_DIR)/tiny/tiny $(NETP_DIR)/tiny/cgi-bin/adder


$(TEST_LIB_DIR)/test_rio: $(TEST_LIB_DIR)/test_rio.o $(LIB_DIR)/rio.o
	$(CC) -o $@ $^
$(TEST_LIB_DIR)/test_dup2: $(TEST_LIB_DIR)/test_dup2.o $(LIB_DIR)/error.o
	$(CC) -o $@ $^


$(IO_DIR)/cpfile: $(IO_DIR)/cpfile.o $(LIB_DIR)/rio.o
	$(CC) -o $@ $^
$(IO_DIR)/readdir: $(IO_DIR)/readdir.o $(LIB_DIR)/error.o
	$(CC) -o $@ $^


$(NETP_DIR)/hostinfo: $(NETP_DIR)/hostinfo.o $(LIB_DIR)/error.o $(LIB_DIR)/sock.o
	$(CC) -o $@ $^ $(WIN_LIB)
$(NETP_DIR)/echoclient: $(NETP_DIR)/echoclient.o $(LIB_DIR)/error.o $(LIB_DIR)/sock.o $(LIB_DIR)/rio.o
	$(CC) -o $@ $^ $(WIN_LIB)
$(NETP_DIR)/echoserver: $(NETP_DIR)/echoserveri.o $(NETP_DIR)/echo.o $(LIB_DIR)/error.o $(LIB_DIR)/sock.o $(LIB_DIR)/rio.o
	$(CC) -o $@ $^ $(WIN_LIB)
$(NETP_DIR)/tiny/tiny: $(NETP_DIR)/tiny/tiny.o $(LIB_DIR)/error.o $(LIB_DIR)/sock.o $(LIB_DIR)/rio.o
	$(CC) -o $@ $^ $(WIN_LIB)
$(NETP_DIR)/tiny/cgi-bin/adder: $(NETP_DIR)/tiny/cgi-bin/adder.o
	$(CC) -o $@ $^


clean:
	rm -f $(LIB_DIR)/*.o $(LIB_DIR)/*.exe
	rm -f $(TEST_LIB_DIR)/*.o $(TEST_LIB_DIR)/*.exe
	rm -f $(IO_DIR)/*.o $(IO_DIR)/*.exe
	rm -f $(NETP_DIR)/*.o $(NETP_DIR)/*.exe
	rm -f $(NETP_DIR)/tiny/*.o $(NETP_DIR)/tiny/*.exe
	rm -f $(NETP_DIR)/tiny/cgi-bin/*.o $(NETP_DIR)/tiny/cgi-bin/*.exe

# test-lib
$(TEST_LIB_DIR)/test_rio.o: $(TEST_LIB_DIR)/test_rio.c
$(TEST_LIB_DIR)/test_dup2.o: $(TEST_LIB_DIR)/test_dup2.c
$(TEST_LIB_DIR)/sock.o: $(TEST_LIB_DIR)/sock.c
# io
$(IO_DIR)/cpfile.o: $(IO_DIR)/cpfile.c
$(IO_DIR)/readdir.o: $(IO_DIR)/readdir.c
#netp
$(NETP_DIR)/hostinfo.o: $(NETP_DIR)/hostinfo.c
$(NETP_DIR)/echoclient.o: $(NETP_DIR)/echoclient.c
$(NETP_DIR)/echoserveri.o: $(NETP_DIR)/echoserveri.c
$(NETP_DIR)/echo.o: $(NETP_DIR)/echo.c
$(NETP_DIR)/tiny/tiny.o: $(NETP_DIR)/tiny/tiny.c
$(NETP_DIR)/tiny/cgi-bin/adder.o: $(NETP_DIR)/tiny/cgi-bin/adder.c

$(LIB_DIR)/rio.o: $(LIB_DIR)/rio.c
$(LIB_DIR)/error.o: $(LIB_DIR)/error.c

